package edu.gdpu.classloader;

/**
 * @author mazebin
 * @date 2021年 07月06日 16:26:39
 * <p>
 *     常量在编译阶段会存入到调用这个常量的方法所在的类的常量池中
 *     本质上，调用类并没有直接调用到定义常量的类，因此不会触及到定义常量的类初始化
 *    <b> 这里是指将常量存储到ClassLoaderTest2的常量池中，之后ClassLoaderTest2和Student就没有任何关系了</b>
 *    我们甚至可以把Student.class文件删除
 * </p>
 * <h2>常见的注记符</h2>
 * <p>注记符 LDC: 表示将int，float,String类型的常量值从常量池中推送至栈顶</p>
 * <p>注记符 BIPUSH：表示将单字节（-128-127）的常量值推送至栈顶</p>
 * <p>注记符 SIPUSH：表示将一个短整型（-32768-32769）推送至栈顶</p>
 * <p>注记符 ICONST_1：表示将int型的1推送至栈顶（ICONST_M1到ICONST_5）</p>
 */
public class ClassLoaderTest2 {
    public static void main(String[] args) {
        System.out.println(Student.a);
    }
}
class Student {
    static  final  String str  = "hello student";//LDC
    static final  short n =1; //ICONST_1
    static  final  int s=1;
    static  final  int m=6;//BIPUSH
    static  final int a = -32765;//SIPUSH
    static {
        System.out.println("static Student block");
    }
}
